﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ShopNet.Model;

namespace ShopNet
{
    public partial class VisualizarPedido : System.Web.UI.Page
    {
        private string totalPedido = string.Empty;

        #region Propriedades

        public new Shop Master
        {
            get
            {
                return ((Shop)(base.Master));
            }
        }

        public int IdPedido
        {
            get { return int.Parse(ViewState["IdPedido"].ToString()); }
            set { ViewState.Add("IdPedido", value); }
        }

        #endregion


        #region Eventos

        #region Page_Load

        protected void Page_Load(object sender, EventArgs e)
        {
            Master.ExibirMensagem(Shop.TipoMensagem.Info, string.Empty);
            if (!IsPostBack)
            {
                IdPedido = int.Parse(Context.Items["IdPedido"].ToString());
            }
            CarregarPedido();
        }

        #endregion
        
        #region gvCesta_RowDataBound

        protected void gvCesta_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType != DataControlRowType.DataRow) return;

            List<ItemPedido> lista = gvCesta.DataSource as List<ItemPedido>;
            ItemPedido pc = lista[e.Row.DataItemIndex];
            Produto prod = NServico.Db.Produtos.FirstOrDefault(p => p.IdProduto == pc.IdProduto);
            HyperLink hlProduto = (HyperLink) e.Row.FindControl("hlProduto");
            hlProduto.Text = prod.Nome;
            hlProduto.NavigateUrl = string.Format("~/VisualizarProduto.aspx?idProduto={0}", pc.IdProduto);

            Label lPrecoUnitario = (Label)e.Row.FindControl("lPrecoUnitario");
            lPrecoUnitario.Text = string.Format("R$ {0}", pc.Preco.ToString("#,##0.00"));

            Label lTotalCarrinho = (Label)e.Row.FindControl("lTotalCarrinho");
            decimal totalCarrinho = pc.Preco*pc.Quantidade;

            lTotalCarrinho.Text = string.Format("R$ {0}", totalCarrinho.ToString("#,##0.00"));
        }

        #endregion

        #endregion

        #region Metodos

        #region CarregarPedido

        private void CarregarPedido()
        {
            Pedido ped = NServico.Db.Pedidos.FirstOrDefault(p => p.IdPedido == IdPedido);

            #region Dados do Pedido

            lNumPedido.Text = ped.IdPedido.ToString();
            
            switch (((StatusPedido)ped.status))
            {
                case StatusPedido.AguardandoPagamento:
                    lStatusPedido.Text = "Aguardando Pagamento";
                    break;
                default:
                    lStatusPedido.Text = ((StatusPedido)ped.status).ToString();
                    break;
            }

            lDataStatus.Text = ped.DataStatus.ToString();
            lDataPedido.Text = ped.Data.ToString();

            #endregion
            
            var lista = NServico.Db.ItemPedidos.Where(i=>i.IdPedido== IdPedido).ToList();
            CarregarCesta(lista);

            #region CarregarEndereco

            lEndereco.Text = ped.Endereco;
            lNumero.Text = ped.Numero;
            lComplemento.Text = ped.Complemento;
            lBairro.Text = ped.Bairro;
            Cidade cid = NServico.Db.Cidades.FirstOrDefault(c => c.IdCidade == ped.IdCidade);
            lCidade.Text = cid.Nome;
            lEstado.Text = NServico.Db.Ufs.FirstOrDefault(u => u.IdUf == cid.IdUf).Nome;
            
            #endregion


        }

        #endregion
        
        #region CarregarCesta

        private void CarregarCesta(List<ItemPedido> lista)
        {
            if (lista.Count == 0)
            {
                Master.ExibirMensagem(Shop.TipoMensagem.Warning, "Não existem Itens no pedido!");
                return;
            }
            totalPedido = lista.Sum(i => i.Quantidade * i.Preco).ToString("#,##0.00");

            gvCesta.DataSource = lista;
            gvCesta.DataBind();

            if (gvCesta.Rows.Count > 0)
            {
                //This replaces <td> with <th> and adds the scope attribute
                gvCesta.UseAccessibleHeader = true;

                //This will add the <thead> and <tbody> elements
                gvCesta.HeaderRow.TableSection = TableRowSection.TableHeader;

                //This adds the <tfoot> element. 
                //Remove if you don't have a footer row
                gvCesta.FooterRow.TableSection = TableRowSection.TableFooter;
            }
        }

        #endregion

        #endregion

        protected string GetValorTotalPedido()
        {
            return totalPedido;
        }
    }
}